// 该例level越小等级越高：0 > 1 > 2
let PriorityQueue = (function () {
  let items = new WeakMap()
  let QueueElement = function (value, level) {
    this.value = value
    this.level = level
  }
  class PriorityQueue {
    constructor() {
      items.set(this, [])
    }
    enqueue(value, level) { // 入列
      let queueElement = new QueueElement(value, level)
      let arr = items.get(this)
      let added = arr.some((item, index) => {
        if (level < item.level) { // 如果要添加的元素的level低于item的，就添加到该节点之前
          arr.splice(index, 0, queueElement)
          return true
        }
      })
      if (!added) arr.push(queueElement)
    }
    dequeue() { // 出列
      return items.get(this).shift()
    }
    front() { // 获取当前队列首位
      return items.get(this)[0]
    }
    size() { // 栈长度
      return items.get(this).length
    }
    isEmpty() { // 栈是否为空
      return items.get(this).length === 0
    }
    clear() { // 清空栈
      items.get(this).length = 0
    }
  }
  return PriorityQueue
})()